ຍຈຣາງຄາຌ OPenGL
            ຺




•   ວາ຅າຌລວຌ: ວາ຅າຌ ຌຢຌກຸຌ ລຄຎຨະຽລຈ
                            ີ ັ ິ ີ
•   ຆໃ ກູຠ: GLbs ຦ວຄ 4CS3
       ື ໃ          ໄ
•   1. ຌ. ໜຸຄໜິຄ ກຈຉວາລາິ ິ
•   2. ຋. ພຸຈ຋ະ຤ຌ ັ
•   3. ຋. ຅ຌ຋ະຽລຠ
             ັ        ີ
I. ຃຤າຠຽຎັຌຠາ.
   ລະຍຍ຋າວຈຂວຄ OpenGL, ລະຍຍ 1.0, ຊກຎວງ
        ັ ໍ ິ                                        ັ               ຶ ໃ
 ວວກຠາຽຠໃ ວຽຈວຌຠຄກວຌຎີ 1992 ຿ຈງ Mark Segal
            ື         ື     ັ
                                ັ ັໄ    ໃ ັໄ
 ຾ຣະ Kurt Akeley. ຌຍຉຄ຾ຉຌຌຠາ, OpenGL ແຈຽຎັຌ                                  ໄ
 ຍາຄ຿ວກາຈຂະ຦ງາງ                        ຈ຤ງກາຌຎວງຠຣຌເ຦ຠຂວຄ
                                         ໄ             ໃ      ີ ຸໄ     ໃ
 ລະຽພາະ OpenGL ຾ຣະ ຉໃ ໍຉາຌ຋ໃ ີຂະ຦ງາງຽ຤ຣາເ຦ຠ ໃ  ໄ
 ລາຠາຈຽພໃ ີຠຽຉຠແຈມາຄຄາງຈາງແຈຣາງຣກວກລວຌ. ຾ຉ ໃ
                  ີ       ໄ ໃ    ໃ               ໄ       ັ ັ
 ຣະລະຍຍເ຦ຠຂວຄ OpenGL tends, OpenGL ຽຎີຈຨູຍ
         ັ          ໃ
 ພາຍ       ຾ຠຌຣະ຦຤າຄພາລາ,
                ໃ             ໃ                  API       ຦ົາງຽ຤຋ີລາຣຍ     ໍ ັ
 rendering ຨູຍພາຍ຃ວຠພິ຤ຽຉີ 2D 3D ຊກຌາເຆມາຄ                     ື ໍ         ໄ ໃ
 ກ຤າຄຂ຤າຄ
    ໄ
   ຨູຍພາຍ Animation ຾ຠຌຽກຈ຅າກກາຌຂຼຌ຿຃ຈຉາຄໂ
                                     ໃ      ີ                            ໃ
 ຿ຈງກາຌເຆຎະລຠຎະລາຌ຿຃ຈລຉາຄກາຌຽຎັຌຨູຍ຅າຣວຄ຋ໃ ີ
              ໄ         ຺                  ີ ໃ                     ໍ
 ລາຠາຈໝຸຌເຈ ໄ
II. ຋ໃ ີຠາຂວຄ຿຃ຈ
                                          ີໄ
 ຿຃ຄ​ລາຄ​ຂວຄ OpenGL ​ເຌ​ກາຌ​ຂຼຌ Project ຌ​ຎະກວຍຠ ີ 4
      ໄ
                        ພາກລ຤ຌ຃:
                             ໃ ື
• ພາກ​ລ຤ຌ Header file
              ໃ
• ພາກລ຤ຌກາຌກາຌຈ຃າຽຣໃ ຠຉຌ void init()
        ໃ         ໍ ຺ ໃ ີ ຺ໄ
• ພາກລ຤ຌກາຌກາຌຈ void Display()
          ໃ        ໍ ຺
• ພາກລ຤ຌ຦ົກ void main()
            ໃ   ັ
1. ພາກ​ລ຤ຌ Header file
        ໃ

   #include <GL/glut.h>

2. ພາກລ຤ຌກາຌກາຌຈ຃າຽຣໃ ຠຉຌ void init()
       ໃ     ໍ ຺ ໃ ີ ໄ຺

   void init(void)
   {
   glClearColor (0.0, 0.0, 0.0, 0.0); // ກາຌຈລຂວຄ
                                          ໍ ຺ ີ
      ຅ລະ຾ຈຄຏຌ
        ໍ         ຺
   }
3. ພາກລ຤ຌກາຌກ າຌຈ void Display()
          ໃ           ຺
  void display (void)
  {
      glClear (GL_COLOR_BUFFER_BIT); //຃ ໍາລໃຄຣຶຍລີເຌຍ ັຍຽຟີ ລ຋ໃ ີຠີ
                                             ັ                ີ
       ຠາກວຌ຾ຣ຤຅ໃ ຄກາຌ ຺ຈລີເໝຉາຠ຋ໃ ີກາຌ ຺ຈ
          ໃ   ໄ ຶ ໍ          ໃ       ໍ

       glClearColor(1.0, 1.0, 1.0, 0.0); //ລີ຋ ໍາວິຈຂວຄຨູຍ
       glPushMatrix();
       glutSolidTeapot(0.5);              // Draw the Teapot
       glPopMatrix();
       glutSwapBuffers();
  }
void keyboard (unsigned char key, int x, int y)
{
  switch (key)
  {
  case 'r':             // ຃ີ r
      glColor3f(1.0, 0.0, 0.0); // ຽຎັຌລ຾ຈຄ
                                         ີ
      glutPostRedisplay();
      break;
  case 'g':             // ຃ີ g
      glColor3f(0.0, 1.0, 0.0);   // ຽຎັຌລຂຼ຤
                                           ີ
      glutPostRedisplay();
      break;
case 'b':           // ຃ີ b
   glColor3f(0.0, 0.0, 1.0);    // ຽຎັຌລຟາ
                                         ີ ໄ
   glutPostRedisplay();
   break;
case 'p':           // ຃ີ p
   glColor3f(0.98, 0.04, 0.70);        // ຽຎັຌລຍ຤ ີ ຺
   glutPostRedisplay();
   break;
case 'o':           // ຃ີ o
   glColor3f(0.98, 0.625, 0.12); // ຽຎັຌລລຠ  ີ ຺ໄ
   glutPostRedisplay();
   break;
case 'm':                    // ຃ີ m
             glColor3f(1.0, 0.0, 1.0);       // ຽຎັຌລຠ຤ຄ
                                                      ີ ໃ
             glutPostRedisplay();
             break;
case 'c':                      // ຃ີ c
             glColor3f(0.0, 1.0, 1.0);       // ຽຎັຌລີຟາ຾ກ ໃ
                                                        ໄ
             glutPostRedisplay();
             break;
case 'e':             // ຃ີ e
             exit(0);                 // ວວກ
             break;
      default:
             break;
  }
}
4. ພາກລ຤ຌ຦ົກ void main()
       ໃ   ັ
void main (int argc, char **argv) //ກາຌຈ຃າຽຣໃ ຠຉຌເຌGLUT
                                       ໍ ຺ ໃ ີ ຺ໄ
{
   glutInit (&argc, argv);
   glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE); //ກາຌຈ          ໍ ຺
   ຾ຍຍເຌກາຌລະ຾ຈຄຏຌຽ຋ິຄໜາ຅ໍ
                       ຺     ໄ
   glutInitWindowSize(500, 500); //ກາຌຈຂະໜາຈຂວຄໜາ຅ລະ຾ຈຄຏຌ
                                      ໍ ຺                ໄ ໍ         ຺
   glutInitWindowPosition(50, 50); //ຉາ຾ໜຄຂວຄໜາ຅ລະ຾ຈຄຏຌ
                                        ໍ  ໃ       ໄ ໍ         ຺
   glutCreateWindow ("Keyboard function : r=red, g=green, b=blue,
                                             ໍ ຺ ໄ
   p=ping, o=orange, c=cyan, e=exit"); //ກາຌຈຂໍ຃຤າຠ຋ໃ ິລະ຾ຈຄຽ຋ິຄ
   title bar
   glutDisplayFunc(display); //ລະ຾ຈຄກຢາຍຟິ ກວວກ຋າຄ຅ພາຍ    ໍ
   glutKeyboardFunc (keyboard);
   glutMainLoop (); //ລະ຾ຈຄກຢາຍຟິ ກວວກ຋າຄ຅ພາຍ຤ຌຨວຍ຅ຌກ຤າ຅ະ
                                                ໍ      ຺     ຺    ໃ
   ຎິຈໜາ຅ໍ
         ໄ
}

O pen gl

  • 1.
    ຍຈຣາງຄາຌ OPenGL ຺ • ວາ຅າຌລວຌ: ວາ຅າຌ ຌຢຌກຸຌ ລຄຎຨະຽລຈ ີ ັ ິ ີ • ຆໃ ກູຠ: GLbs ຦ວຄ 4CS3 ື ໃ ໄ • 1. ຌ. ໜຸຄໜິຄ ກຈຉວາລາິ ິ • 2. ຋. ພຸຈ຋ະ຤ຌ ັ • 3. ຋. ຅ຌ຋ະຽລຠ ັ ີ
  • 2.
    I. ຃຤າຠຽຎັຌຠາ. ລະຍຍ຋າວຈຂວຄ OpenGL, ລະຍຍ 1.0, ຊກຎວງ ັ ໍ ິ ັ ຶ ໃ ວວກຠາຽຠໃ ວຽຈວຌຠຄກວຌຎີ 1992 ຿ຈງ Mark Segal ື ື ັ ັ ັໄ ໃ ັໄ ຾ຣະ Kurt Akeley. ຌຍຉຄ຾ຉຌຌຠາ, OpenGL ແຈຽຎັຌ ໄ ຍາຄ຿ວກາຈຂະ຦ງາງ ຈ຤ງກາຌຎວງຠຣຌເ຦ຠຂວຄ ໄ ໃ ີ ຸໄ ໃ ລະຽພາະ OpenGL ຾ຣະ ຉໃ ໍຉາຌ຋ໃ ີຂະ຦ງາງຽ຤ຣາເ຦ຠ ໃ ໄ ລາຠາຈຽພໃ ີຠຽຉຠແຈມາຄຄາງຈາງແຈຣາງຣກວກລວຌ. ຾ຉ ໃ ີ ໄ ໃ ໃ ໄ ັ ັ ຣະລະຍຍເ຦ຠຂວຄ OpenGL tends, OpenGL ຽຎີຈຨູຍ ັ ໃ ພາຍ ຾ຠຌຣະ຦຤າຄພາລາ, ໃ ໃ API ຦ົາງຽ຤຋ີລາຣຍ ໍ ັ rendering ຨູຍພາຍ຃ວຠພິ຤ຽຉີ 2D 3D ຊກຌາເຆມາຄ ື ໍ ໄ ໃ ກ຤າຄຂ຤າຄ ໄ ຨູຍພາຍ Animation ຾ຠຌຽກຈ຅າກກາຌຂຼຌ຿຃ຈຉາຄໂ ໃ ີ ໃ ຿ຈງກາຌເຆຎະລຠຎະລາຌ຿຃ຈລຉາຄກາຌຽຎັຌຨູຍ຅າຣວຄ຋ໃ ີ ໄ ຺ ີ ໃ ໍ ລາຠາຈໝຸຌເຈ ໄ
  • 3.
    II. ຋ໃ ີຠາຂວຄ຿຃ຈ ີໄ ຿຃ຄ​ລາຄ​ຂວຄ OpenGL ​ເຌ​ກາຌ​ຂຼຌ Project ຌ​ຎະກວຍຠ ີ 4 ໄ ພາກລ຤ຌ຃: ໃ ື • ພາກ​ລ຤ຌ Header file ໃ • ພາກລ຤ຌກາຌກາຌຈ຃າຽຣໃ ຠຉຌ void init() ໃ ໍ ຺ ໃ ີ ຺ໄ • ພາກລ຤ຌກາຌກາຌຈ void Display() ໃ ໍ ຺ • ພາກລ຤ຌ຦ົກ void main() ໃ ັ
  • 4.
    1. ພາກ​ລ຤ຌ Headerfile ໃ #include <GL/glut.h> 2. ພາກລ຤ຌກາຌກາຌຈ຃າຽຣໃ ຠຉຌ void init() ໃ ໍ ຺ ໃ ີ ໄ຺ void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); // ກາຌຈລຂວຄ ໍ ຺ ີ ຅ລະ຾ຈຄຏຌ ໍ ຺ }
  • 5.
    3. ພາກລ຤ຌກາຌກ າຌຈvoid Display() ໃ ຺ void display (void) { glClear (GL_COLOR_BUFFER_BIT); //຃ ໍາລໃຄຣຶຍລີເຌຍ ັຍຽຟີ ລ຋ໃ ີຠີ ັ ີ ຠາກວຌ຾ຣ຤຅ໃ ຄກາຌ ຺ຈລີເໝຉາຠ຋ໃ ີກາຌ ຺ຈ ໃ ໄ ຶ ໍ ໃ ໍ glClearColor(1.0, 1.0, 1.0, 0.0); //ລີ຋ ໍາວິຈຂວຄຨູຍ glPushMatrix(); glutSolidTeapot(0.5); // Draw the Teapot glPopMatrix(); glutSwapBuffers(); }
  • 6.
    void keyboard (unsignedchar key, int x, int y) { switch (key) { case 'r': // ຃ີ r glColor3f(1.0, 0.0, 0.0); // ຽຎັຌລ຾ຈຄ ີ glutPostRedisplay(); break; case 'g': // ຃ີ g glColor3f(0.0, 1.0, 0.0); // ຽຎັຌລຂຼ຤ ີ glutPostRedisplay(); break;
  • 7.
    case 'b': // ຃ີ b glColor3f(0.0, 0.0, 1.0); // ຽຎັຌລຟາ ີ ໄ glutPostRedisplay(); break; case 'p': // ຃ີ p glColor3f(0.98, 0.04, 0.70); // ຽຎັຌລຍ຤ ີ ຺ glutPostRedisplay(); break; case 'o': // ຃ີ o glColor3f(0.98, 0.625, 0.12); // ຽຎັຌລລຠ ີ ຺ໄ glutPostRedisplay(); break;
  • 8.
    case 'm': // ຃ີ m glColor3f(1.0, 0.0, 1.0); // ຽຎັຌລຠ຤ຄ ີ ໃ glutPostRedisplay(); break; case 'c': // ຃ີ c glColor3f(0.0, 1.0, 1.0); // ຽຎັຌລີຟາ຾ກ ໃ ໄ glutPostRedisplay(); break; case 'e': // ຃ີ e exit(0); // ວວກ break; default: break; } }
  • 9.
    4. ພາກລ຤ຌ຦ົກ voidmain() ໃ ັ void main (int argc, char **argv) //ກາຌຈ຃າຽຣໃ ຠຉຌເຌGLUT ໍ ຺ ໃ ີ ຺ໄ { glutInit (&argc, argv); glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE); //ກາຌຈ ໍ ຺ ຾ຍຍເຌກາຌລະ຾ຈຄຏຌຽ຋ິຄໜາ຅ໍ ຺ ໄ glutInitWindowSize(500, 500); //ກາຌຈຂະໜາຈຂວຄໜາ຅ລະ຾ຈຄຏຌ ໍ ຺ ໄ ໍ ຺ glutInitWindowPosition(50, 50); //ຉາ຾ໜຄຂວຄໜາ຅ລະ຾ຈຄຏຌ ໍ ໃ ໄ ໍ ຺ glutCreateWindow ("Keyboard function : r=red, g=green, b=blue, ໍ ຺ ໄ p=ping, o=orange, c=cyan, e=exit"); //ກາຌຈຂໍ຃຤າຠ຋ໃ ິລະ຾ຈຄຽ຋ິຄ title bar glutDisplayFunc(display); //ລະ຾ຈຄກຢາຍຟິ ກວວກ຋າຄ຅ພາຍ ໍ glutKeyboardFunc (keyboard); glutMainLoop (); //ລະ຾ຈຄກຢາຍຟິ ກວວກ຋າຄ຅ພາຍ຤ຌຨວຍ຅ຌກ຤າ຅ະ ໍ ຺ ຺ ໃ ຎິຈໜາ຅ໍ ໄ }